/*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  dev
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    location    "system";
    object      createPatchDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// This application/dictionary does the following:
// - Creates new patches from boundary faces, either specified as a set of
//   existing patches or a faceZone, either looked-up from the current list of
//   faceZones or generated locally from a zoneGenerator
// - Orders faces on coupled patches such that they are opposite. This is done
//   for all coupled faces, not just for any patches created.
// - Optional: Synchronises points on coupled patches.
// - Removes any zero-sized non-coupled patches that were not added.

// Optional: Do a synchronisation of coupled points after creation of any
// patches; defaults to false. Note: this does not work with points that are on
// multiple coupled patches with transformations (i.e. cyclics).
pointSync false;

// Optional: Write cyclic matches into .obj format; defaults to false.
writeCyclicMatch false;

// Patches to create
patches
{
    cyc_half0
    {
        // Dictionary to construct new patch from
        patchInfo
        {
            type cyclic;
            neighbourPatch cyc_half1;

            // Optional: Explicitly set the transformation.
            transformType rotational;
            rotationAxis (1 0 0);
            rotationCentre (0 0 0);
            // transformType translational;
            // separation (1 0 0);

            // Optional: Non-default tolerance to prevent ordering failure
            // errors on poor meshes
            // matchTolerance 1e-2;
        }

        // How to construct: either from 'patches' or 'zone'
        constructFrom patches;

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (periodic1);

        // If constructFrom = zone : name of faceZone
        // zone f0;

        // ... or generate zone
        // zone
        // {
        //     type        box;
        //     box         (-0.035 -0.1 -1e-5)(0.035 0.1 1e-5);
        // }
    }

    cyc_half1
    {
        // Dictionary to construct new patch from
        patchInfo
        {
            type cyclic;
            neighbourPatch cyc_half0;

            // Optional: Explicitly set the transformation.
            transformType rotational;
            rotationAxis (1 0 0);
            rotationCentre (0 0 0);
            // transformType translational;
            // separation (-1 0 0);
        }

        // How to construct: either from 'patches' or 'zone'
        constructFrom patches;

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (periodic2);

        // If constructFrom = zone : name of faceZone
        // zone f0;

        // ... or generate zone
        // zone
        // {
        //     type        box;
        //     box         (-0.035 -0.1 -1e-5)(0.035 0.1 1e-5);
        // }
    }
}

// ************************************************************************* //
